package com.zds.z_init;

import com.zds.z_config.SpringApplicationConfig;
import com.zds.z_config.WebMVCConfig;
import org.springframework.web.filter.CharacterEncodingFilter;
import org.springframework.web.filter.HiddenHttpMethodFilter;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;

import javax.servlet.Filter;

/**
 * @className:WebInit
 * @date: 2025/1/17 下午12:22
 * @description:
 */
public class WebInit extends AbstractAnnotationConfigDispatcherServletInitializer {
    @Override
    protected Class<?>[] getRootConfigClasses() {
        return new Class[]{SpringApplicationConfig.class};
    }

    @Override
    protected Class<?>[] getServletConfigClasses() {
        return new Class[]{WebMVCConfig.class};
    }

    @Override
    protected String[] getServletMappings() {
        return new String[]{"/"};
    }

    @Override
    protected Filter[] getServletFilters() {
        CharacterEncodingFilter characterEncodingFilter = new CharacterEncodingFilter();
        characterEncodingFilter.setEncoding("UTF-8");
        characterEncodingFilter.setForceRequestEncoding(true);
//        HiddenHttpMethodFilter是Spring MVC提供的一个过滤器，用于处理HTTP请求中的隐藏方法。
//        以下是关于它的详细介绍：
//        功能
//          支持RESTful风格请求：在RESTful架构中，资源的操作通常对应HTTP协议的不同方法，
//              如GET（查询）、POST（新增）、PUT（修改）、DELETE（删除）。
//              然而，HTML表单默认只支持GET和POST方法，
//              HiddenHttpMethodFilter允许通过POST请求模拟PUT和DELETE等其他方法，使浏览器能够发送这些请求。
//          方法转换：该过滤器读取POST请求中的_method参数，并将HTTP请求方法更改为参数指定的方法，
//              从而支持PUT和DELETE等请求。
        HiddenHttpMethodFilter hiddenHttpMethodFilter = new HiddenHttpMethodFilter();
        return new Filter[]{characterEncodingFilter, hiddenHttpMethodFilter};
    }
}
